<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Eder
 */
class ProcesarFichaBO extends GeneralSisResBO{
    
    var $fichaDao;
    var $medicoDao;
    var $horarioDao;
    var $tipoTarjetaDao;
    var $className;

    public function __construct() {
        $this->className = 'ProcesarFichaBO';
        LogUtil::info("class $this->className", "__construct");
        $this->fichaDao = DAOFactory::getFichaDao();
        $this->medicoDao = DAOFactory::getMedicoDao();
        $this->horarioDao = DAOFactory::getHorarioDao();
        $this->tipoTarjetaDao = DAOFactory::getTipoTarjetaDao();
    }

    public function __destruct() {
        LogUtil::info("class $this->className", "__destruct");
    }

    public function guardarFicha($ficha) {
       LogUtil::info("class $this->className", "guardarFicha"); 
       $retorno = null;
       try{           
           Transaction::beginTransaction();           
           $retorno = $this->fichaDao->guardarFicha($ficha);
           Transaction::commitTransaction();                      
       }catch(Exception $e){
           Transaction::rollbackTransaction();
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $retorno;
    }    
    
    public function obtenerDatosMedicoConsultaPorIdMedico($id) {
       LogUtil::info("class $this->className", "obtenerDatosMedicoConsultaPorIdMedico"); 
       try{           
           $medico = $this->medicoDao->obtenerMedicoPorId($id); 
       }catch(Exception $e){;
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $medico;
    }
    
    public function obtenerDatosHorarioConsultaPorIdHorario($id) {
       LogUtil::info("class $this->className", "obtenerDatosHorarioConsultaPorIdHorario"); 
       try{           
           $horario = $this->horarioDao->obtenerHorarioPorId($id); 
       }catch(Exception $e){;
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $horario;
    }
    
    public function verificarFichaValidaEnSISRES($ficha){
       LogUtil::info("class $this->className", "verificarFichaValidaEnSISRES"); 
       $retornoVerificacion = array();
       $retornoVerificacion['esValido'] = true;
       $retornoVerificacion['motivo'] = -1; 
       try{
           Transaction::beginTransaction(); 
           //1. Obtenemos todas las fichas
           $fichasObtenidas = $this->fichaDao->obtenerFichasPorDatosAdicionales($ficha);
           //2. verificamos que exista al menos una ficha
           if (!empty($fichasObtenidas)) {
                //2.1 recorremos las fichas para verificar 
                foreach ($fichasObtenidas as $tmpFicha) {
                    if ( $tmpFicha->estado == EstadoFichaType::Procesando )
                    {
                        $retornoVerificacion['esValido'] = false;
                        $retornoVerificacion['motivo'] = EstadoFichaType::Procesando; 
                        break;
                    }else{
                        if ( $tmpFicha->estado == EstadoFichaType::Reservada )
                        {
                            $retornoVerificacion['esValido'] = false;
                            $retornoVerificacion['motivo'] = EstadoFichaType::Reservada; 
                            break;
                        }
                    }            
                }
           }           
           Transaction::commitTransaction();  
       }catch(Exception $e){;
           Transaction::rollbackTransaction();
           LogUtil::info("class $this->className", $e->getMessage());
           throw new Exception($e->getMessage(), $e->getCode());
       }
       return $retornoVerificacion;
    }

}
?>
